Funktionen für Formeln / Operanden und Operatoren

Operanden

Operanden können Konstanten, Datenfelder oder Formelfelder sein.

  • Numerische Konstanten - Konstanten können in dezimaler, binärer, oktaler oder hexadezimaler Schreibweise eingegeben werden.
  • Bei der binären Schreibweise ist ein 'b' anzuhängen , bei der oktalen ein 'o' und bei der hexadezimalen ein 'h'.
  • Bei gebrochenen Zahlen ist das in Windows eingestellte Dezimalzeichen zu verwenden.
  • Ausschliesslich bei der (normalen) dezimalen Schreibweise ist auch eine Darstellung in Exponentialdarstellung möglich. Dabei ist zuerst die Mantisse anzugeben, danach ein 'E' und am Ende der Exponent zur Basis 10.
  • Eine vordefinierte Konstante ist pi mit 3.14159... .
  • Logische Konstanten - Logikkonstanten sind true und false;
  • Zeichenkettenkonstanten / -funktionen - Zeichenkettenkonstanten sind in Anführungszeichen " einzuschliessen. Innere Anführungszeichen sind zu doppeln.
  • user (liefert das zweistellige Benutzerkürzel)
  • Datumskonstanten
    date (liefert das aktuelle Rechnerdatum)
    now (liefert das aktuelle Rechnerdatum mit Zeitangabe)
  • Konstante für leere Felder - Null-Werte sollten in Formularen nicht an Formelplatzhalter zugewiesen werden. Sie können für die Auswertung von select- und dbf-Anweisungen benutzt werden. Der Vergleich mit anderen Typen liefert stets false.
  • Variablen in Formeln (variable Operanden, Datenfelder) werden über Auswahlschalter eingefügt und mit geschweiften Klammern gekennzeichnet. Formelausdrücke können Zeichenketten, Zahlen, Wahrheitswerte und eingeschränkt auch null-Werte (unbestimmt vom Wert und Typ) verarbeiten und als Ergebnis liefern.

Die Verarbeitung von Datums- und Zeitwerten erfolgt über Zahlen, wobei der ganzzahlige Anteil das Datum und der gebrochene Anteil den Zeitanteil enthält. So kann man beispielsweise das Datum des nächsten Tages andrucken, wenn man zur "Datumszahl" eine 1 addiert z.B.:
[V:0:DATS:::0::{System.Datum/Uhrzeit}+1]
[V:0::::0::asdatestring({System.Datum/Uhrzeit}+1;"DD.MM.YYYY")]

Die Abarbeitung erfolgt nach den üblichen Vorrangregeln (Potenzen vor Punktrechnung vor Strichrechnung). Wollen Sie eine bestimmte Abarbeitungsreihenfolge festlegen, müssen Sie runde Klammern benutzen.

Kalkulatorfunktion case

Mithilfe der Funktion case können Sie Formeln erstellen, die mehrere Vergleiche enthalten. Hierfür waren vorher komplizierte, verschachtelte „if“-Anweisungen notwendig. Soll zum Beispiel statt dem Status-Wert ein entsprechender Text ausgegeben werden, kann hierfür eine übersichtliche caseFunktion verwendet werden.

Abbildung 15.1760: Beispiel

Der erste Parameter ist der Vergleichswert gefolgt von Vergleichen und dem gewünschten Ergebnis. Der letzte Parameter ist das Ergebnis, wenn keine der angegebenen Möglichkeiten übereinstimmt.

Operatoren und Funktionen

Haben Funktionen mehrere Parameter, sind diese durch Semikolon zu trennen.

für numerische Operanden

+

Addition (von Zahlen oder Zeichenketten)

-

negativer Wert oder Subtraktion

*

Multiplikation

/

Division

mod

Modulo-Funktion (z.B.: 5 mod 3 ergibt 2)

div

ganzzahlige Division (z.B.: 4 div 3 ergibt 1)

^

Potenz, nach Möglichkeit durch Multiplikationen ersetzen (z.B.: 2 ^ 4 ergibt 16)

!

Fakultät (z.B.: ! 5 ergibt 1*2*3*4*5=120)

ln

natürlicher Logarithmus (Basis e)
(z.B.: ln(2,71828182845905) ergibt etwa 1)

ld

Logarithmus zur Basis 2 (z.B.: ld (2) ergibt 1)

lg

dekadischer Logarithmus (Basis 10) (z.B.: lg(10) ergibt 1)

abs

Absolutbetrag (z.B. abs(-11)  ergibt 11)

int

ganzzahliger Anteil (z.B.: int(-1,7) ergibt -1)

sign

Signumfunktion (Ergebnis ist : -1 für Werte <0, 1 für Werte>0, 0 bei 0)

frac

gebrochener Anteil (z.B.: frac(-1,7) ergibt - 0,7)

floor

grösste ganze Zahl, die kleiner oder gleich dem angegebenen numerischen Ausdruck ist (z.B.: floor(1,7) ergibt 1)

ceiling

kleinste ganze Zahl, die grösser oder gleich dem angegebenen numerischen Ausdruck ist (z.B.: ceiling(1,7) ergibt 2)

rdm

Zufallszahl kleiner als der Operand erzeugen (z.B.: rdm(4) liefert 0, 1, 2 oder 3)

rnd

Rundung

rn2

Rundung auf 2 Nachkommastellen

sqrt

Quadratwurzel

sin

Sinusfunktion

cos

Kosinusfunktion

tan

Tangensfunktion

cot

Kotangensfunktion

not

logische Negation der Binärwerte

and

logische Undverknüpfung der Binärwerte

ior

logische Oderverknüpfung der Binärwerte

xor

log. Exklusivoderverknüpfung der Binärwerte

shl

bitweises Verschieben nach links

shr

bitweises Verschieben nach rechts

für Zeichenketten-Operanden

+

Addition (Aneinanderkettung von Zeichenketten)

* wird  eine Zeichenkette mit einer Zahl > 0 multipliziert erhält man eine Zeichenkette, in der die ursprüngliche Zeichenkette vervielfältigt wurde;
Faktoren < 0 ergeben eine Aneinanderreihung der gedrehten ursprünglichen Zeichenkette;
Beispiele:
 "0" * (10 - length({Nr})) + {Nr} liefert eine Zeichenkette der Länge 10, in der der Wert von {Nr} linksbündig mit Nullen aufgefüllt wird;
"Regal" + lower(("Regal"*(-1))) liefert als Ergebnis Regallager

upper

Grossschreibung

lower

Kleinschreibung

substring

Teilzeichenkette 
1. Parameter: Ausgangszeichenkette 
2. Parameter: Startposition (numerisch) 
3. Parameter: Länge (numerisch)
der 3. Parameter kann weggelassen werden

replace ersetzt (nicht rekursiv) alle Vorkommen des zweiten Zeichenfolgenausdrucks im ersten Zeichenfolgenausdruck durch einen dritten Ausdruck;
1. Parameter: Ausgangszeichenkette
2. Parameter: Suchzeichenkette
3. Parameter: Ersatzzeichenkette
Der 3. Parameter kann zum Löschen aller Vorkommen der Suchzeichenkette aus der Ausgangszeichenkette weggelassen werden.
Beispiel:
replace("Staumauer";"u";"hl") liefert Stahlmahler
asfilename für Dateinamen nicht erlaubte Zeichen der Ausgangszeichenkette werden durch ein Ersatzzeichen ersetzt;
1. Parameter: Ausgangszeichenkette
2. Parameter: Ersatzzeichen
Der 2. Parameter kann weggelassen werden,  als Ersatzzeichen wird dann  "_" verwendet.
Beispiel:
asfilename("A < > ? "" : | \ / * Z";"x")
liefert "A x x x x x x x x x Z"
concat verbindet zwei Zeichenfolgenausdrücke durch einen Verkettungsausdruck;
1. Parameter: eine Zeichenkette
2. Parameter: eine Zeichenkette
3. Parameter: Verkettungszeichenkette
Ist eine der Zeichenketten leer, wird die Zeichenkette, die nicht leer ist, ohne Verkettungsausdruck ausgegeben.
Beispiel:
concat("Mustermann";"Max";",") liefert Mustermann,Max
newline

mit dieser Konstante kann ein Zeilenumbruch innerhalb des aktuellen Platzhalters erzwungen werden
Beispiel:
concat({Anrede}; concat({Name}; {Vorname}; ", "); newline) liefert
Herr
Mustermann,Max

length liefert in einem numerischen Ergebnis die Anzahl der Zeichen in der Zeichenkette
trim entfernt am Anfang und Ende einer Zeichenkette alle Leer- und Steuerzeichen
ltrim entfernt am Anfang einer Zeichenkette alle Leer- und Steuerzeichen
rtrim entfernt am Ende einer Zeichenkette alle Leer- und Steuerzeichen
locate liefert in einem numerischen Ergebnis die erste Position der Suchzeichenkette in einer Ausgangszeichenkette;
falls die Suchzeichenkette nicht enthalten ist,  ist das Ergebnis 0;
1. Parameter: Suchzeichenkette 
2. Parameter: Ausgangszeichenkette 
lines

liefert die Anzahl der Zeilen eines Langtextes;
Parameter: eine Zeichenkette
Beispiel:
lines({.Kopftext})

guid36 liefert als Ergebnis eine Zeichenkette (36 Zeichen) ohne die führende und schliessende Klammer
1. Parameter: eine 38-stellige GUID
Beispiel:
guid36({Kennung})
fill füllt eine Zeichenkette bis zur definierten Länge auf
1. Parameter: Ausgangszeichenkette
2. Parameter: Gesamtlänge (numerisch)
3. Parameter: Füllzeichen(-kette)
4. Parameter: links auffüllen (true); rechts auffüllen (false)
der 4. Parameter kann weggelassen werden (Standard ist true)
Beispiel:
fill(asstring({FreieZahl1});5;"0")
fill({Bezeichnung};80;" ";false)
split zerteilt eine Zeichenkette in gleichmässige Teile
1. Parameter: Ausgangszeichenkette
2. Parameter: Anzahl der Zeichen nach der jeweils getrennt werden soll (numerisch). Ist der Parameter kleiner Nuller, erfolgt die Aufsplittung vom Null beginnend.
3. Parameter: Füllzeichen(-kette)
der 3. Parameter kann weggelassen werden (Standard ist ein Leerzeichen)
Beispiel:
split({IBAN};4)
intersetcount

mit dieser Funktion lässt sich die Anzahl übereinstimmender Teilzeichenketten zweier Zeichenketten ermitteln

1. Parameter: Zeichenkette (eine "Liste" von Teilzeichenketten)

2. Parameter: Zeichenkette (eine "Liste" von Teilzeichenketten)

3. Parameter: Trennzeichen der 3. Parameter kann weggelassen werden (Standard ist ein |)

Beispiel:

intersectcount("ABC|D|EF";"G|EF|HM|ABC") liefert den Wert 2 für die Übereinstimmungen von "ABC" und "EF" in beiden Parametern

für Logikoperanden

not

logische Negation

and

logische Und-Verknüpfung

ior

logische Oder-Verknüpfung

xor

logische Exklusiv-Oder-Verknüpfung

if Fallunterscheidung
1. Parameter: logischer Ausdruck
2. Parameter: Ausdruck beliebigen Formats, welcher das Ergebnis liefert, wenn der 1. Parameter den Wert true besitzt
3. Parameter: Ausdruck beliebigen Formats, welcher das Ergebnis liefert, wenn der 1. Parameter den Wert false besitzt
case Die Funktion hat mindestens 4 Parameter, die Anzahl ist dabei immer geradzahlig. Der erste Parameter ist der Wert, welcher verglichen werden soll, der letzte das Ergebnis wenn keine der angegebenen Möglichkeiten übereinstimmt. Die mittleren Parameter sind paarweise ein Wert und das bei Übereinstimmung auszugebende Ergebnis. Beispiel: case({Land};"DE";"Deutschland";"AT";"Österreich";"CH";"Schweiz";"")

Erkennung und Behandlung von Null-Werten

isnull

1. Parameter: ein Ausdruck von beliebigem Format(Zeichenkette, Zahl, Datum, logisch, Null-Wert)
2. Parameter: Ergebnis, wenn der erste Parameter null ist
Beispiel:
// Ersetzung eventueller Null-Werte durch einen Leerstring
isnull(select("FreierText1 from kunden where nummer = '10000'");"")
// Ersetzung eventueller Null-Werte durch die Zahl 0
 isnull(select("FreieZahl1 from kunden where nummer = '10000'");0)

Vergleichsoperatoren

(die Operanden müssen vom gleichen Typ sein und liefern ein logisches Ergebnis)

=

Gleichheit

<>

Ungleichheit

< kleiner
> grösser
<= kleiner gleich
>= grösser gleich

Umwandlungsfunktionen

asfloat

liefert den numerischen Wert einer Zeichenkette;
1. Parameter: Ausgangszeichenkette
2. Parameter: numerischer Wert, der das Ergebnis liefert, wenn die Ausgangszeichenkette nicht in eine Zahl umgewandelt werden kann.
Der 2. Parameter kann weggelassen werden.

asstring wandelt einen numerischen Wert in eine Zeichenkette um;
1. Parameter: Ausgangszahl
2. Parameter: ein Format für die Darstellung wie z.B. "#,##0.00" 
der 2. Parameter kann weggelassen werden
asdatestring wandelt ein Datum in eine Zeichenkette um;
1. Parameter: Ausgangsdatum
2. Parameter: ein Format für die Darstellung wie z.B.
"MMM.YYY"
der 2. Parameter kann weggelassen werden
asdatetime wandelt ein Datum in einen numerischen Wert (internes Datumsformat, mit dem gerechnet werden kann) um;
ein Parameter vom Typ Zeichenkette: Ausgangsdatum im Windowsformat
monat wandelt einen numerischen Wert zwischen 1 und 12 in den Monatsnamen um, Werte > 12 bzw. < 1 geben einen Leerstring aus;
z.B. monat(6) liefert "Juni"
xmltag

wandelt eine Zeichenkette in das Format UTF8 um und schliesst das Ergebnis in < > ein
Parameter: eine Zeichenkette
Beispiel:
xmltag("Text") liefert <Text>

xmlstring wandelt eine Zeichenkette in UTF8 um, nachdem zuvor <, > und & ersetzt wurden
Parameter: eine Zeichenkette
htmlintext liefert den Textinhalt eines HTML-Quelltextes
Parameter: Ausgangszeichenkette
Beispiel:
htmlintext({HTMLText})

Hilfsfunktionen zum Schreiben von Transact-SQL-Select-Anweisungen

astsqlfloat

1. Parameter: Zahl
astsqlfloat(1,2345) liefert 1.2345

astsqlnchar 1. Parameter: Zeichenkette
astsqlnchar("123") liefert N'123'
astsqldate 1. Parameter: Ausgangsdatum
astsqldate(date) liefert z.B. am 1.1.2014 N'01.01.2014'
astsqldate(41640) liefert N'01.01.2014'
astsqlbit 1. Parameter: logischer Wert
astsqlbit(true) liefert 1

Hinweis: Die Funktionen liefern als Ergebnis eine Zeichenkette mit einem Leerzeichen am Anfang und am Ende und können zur Unterstützung beim Schreiben von Transact-SQL-Select-Anweisungen in Formeln oder eigenen Blöcken verwendet werden.

Datumsfunktionen

zinstage

ermittelt die Zinstage entsprechend der 30tägigen Zinsperiode der Bank;
1. Parameter: Beginndatum
2. Parameter: Enddatum

zinsmonate

ermittelt die Zinsmonate;
1. Parameter: Beginndatum
2. Parameter: Enddatum

zahlungstermin

ermittelt aus einem Datum und den Angaben der Zahlungsbedingung einen Termin;
1. Parameter: Startdatum
2. Parameter: Typ der Berechnung
3. Parameter: Tagesangabe

kweek ermittelt die Kalenderwoche; als Parameter ist ein Datum als Variable z.B. kweek({.Datum})
 oder internes Datumsformat anzugeben z.B. kweek(asdatetime("30.12.2012"))
kyear ermittelt das Kalenderjahr zu dem die Kalenderwoche gehört; als Parameter ist ein Datum als Variable z.B. kyear({.Datum})
 oder internes Datumsformat anzugeben z.B.  kyear(asdatetime("30.12.2012"))

Beispiele

für das Datum 30.12.2021 liefert kweek eine 52, kyear die 2021 → der 30.12.2021 gehört zur 52.Kalenderwoche 2021
für das Datum 31.12.2021 liefert kweek eine 1, kyear die 2022 → der 31.12.2021 gehört schon zur 1.Kalenderwoche 2022

Datenbankfunktionen

select liefert den Wert eines Tabellenfeldes;
als Parameter ist eine select-Anweisung anzugeben, wobei das führende select weggelassen wird;
liefert die select-Anweisung keinen Wert zurück, ist das Ergebnis
null

Funktionen zum Lesen u. Schreiben von Variablenwerten

iniput schreibt einen Eintrag in eine Ini-Datei oder löscht einen Eintrag; liefert als Ergebnis einen logischen Wert, ob der Befehl erfolgreich war:
1. Parameter: Dateiname, Dateinamen ohne Laufwerk beziehen sich auf das Mandantenverzeichnis;
2. Parameter: Sektionsbezeichnung;
3. Parameter: Bezeichnung des Eintrags;
4. Parameter: Zeichenkette, die eingetragen werden soll.
Bei Weglassen des 4. Parameters wird ein eventuell vorhandener Eintrag gelöscht.
//Eintrag erzeugen:
iniput("C:\TEST.INI";"Sektion";"Wert";"100")
//Eintrag löschen:
iniput("C:\TEST.INI";"Sektion";"Wert")

iniget

liest eine Zeichenkette aus einer Ini-Datei:
1. Parameter: Dateiname, Dateinamen ohne Laufwerk beziehen sich auf das Mandantenverzeichnis;
2. Parameter: Sektionsbezeichnung;
3. Parameter: Bezeichnung des Eintrags;
4. Parameter: Ergebnis, wenn die Datei nicht existiert oder kein Eintrag in der Ini-Datei gefunden wird.
Bei Weglassen des 4. Parameters ist die leere Zeichenkette der Standardwert.
z.B. iniget("C:\TEST.INI";"Sektion";"Wert";"0")
put

speichert programmintern einen Wert, solange das Programm läuft:
1. Parameter: eine Zeichenkette für die Identifikation des Wertes (keine Unterscheidung von Gross- und Kleinschreibung)
2. Parameter: ein Ausdruck von beliebigem Format(Zeichenkette, Zahl, Datum, logisch, Null-Wert)
Beispiel:
// Az.Beichern des aktuellen Zeitpunktes
put("zeit"; now)
// Anlegen oder Ändern der programminternen Variable "variable1" mit dem logischen Wert WAHR

put("variable1"; true)

get

liest programminterne Werte:
1. Parameter: eine Zeichenkette für die Identifikation des Wertes (keine Unterscheidung von Gross- und Kleinschreibung)
2. Parameter: Ergebnis, wenn programminterner Wert nicht vorhanden ist

Beispiel:
// Lesen der programminternen Variable "variable1" get("variable1"; false)

//ein Durchlaufzähler mit Namen "a"
put("a"; 1 + get("a"; 0))

Spezielle Funktionen

alle Programme

shellexecute zum Absetzen von Kommandos für das Betriebssystem;
1. Parameter (String): Name des Programms, das geöffnet werden soll
2. Parameter (String): er enthält die Kommandozeilenparameter für das Programm.
3. Parameter (Typ Zahl zwischen 0 und 10): Er ist dafür verantwortlich, in welchem Zustand das Fenster des gerufenen Programms geöffnet werden soll.
Als Ergebnis liefert die Funktion eine Zahl, die bei Zahlen kleiner 32 eine Fehlernummer darstellt, der 2. und 3. Parameter kann weggelassen werden
datenpfad liefert den Datenpfad mit abschliessenden Backslash
mandantenpfad liefert den  Mandantenpfad mit abschliessenden Backslash

nur Auftrag

bestand

liefert den aktuellen Bestand von Artikeln;
als Parameter ist die Artikelnummer als Ausdruck oder Datenbankfeld anzugeben,
weitere Parameter für detailliertere Lagerinformationen sind möglich
bestandpm liefert den aktuellen Bestand von Artikeln in der Preismengeneinheit;
als Parameter ist die Artikelnummer als Ausdruck oder Datenbankfeld anzugeben,
weitere Parameter für detailliertere Lagerinformationen sind möglich
gepackt liefert den gepackten Bestand von Artikeln;
als Parameter ist die Artikelnummer als Ausdruck oder Datenbankfeld anzugeben,
weitere Parameter für detailliertere Lagerinformationen sind möglich
bestellt liefert die aktuell bestellte Menge von Artikeln;
1. Parameter: die Artikelnummer
2. Parameter: der Standort
als Ausdruck oder Datenbankfeld,
der 2. Parameter kann weggelassen werden 
inproduktion liefert die Menge von Artikeln, die produziert wird;
1. Parameter: die Artikelnummer
2. Parameter: der Standort
als Ausdruck oder Datenbankfeld,
der 2. Parameter kann weggelassen werden
reserviert liefert die aktuell reservierte Menge von Artikeln;
1. Parameter: die Artikelnummer
2. Parameter: der Standort
als Ausdruck oder Datenbankfeld,
der 2. Parameter kann weggelassen werden
listenpreis

liefert den aktuellen Listenpreis von Artikeln;
als Parameter ist die Artikelnummer als Ausdruck oder Datenbankfeld anzugeben

kalkulationspreis liefert den aktuellen Kalkulationspreis von Artikeln; als Parameter ist die Artikelnummer als Ausdruck oder Datenbankfeld anzugeben.
belegtyp liefert die Beschreibung des Belegtyps; als Parameter ist der Belegtyp anzugeben.
belegadresskuerzel liefert das Adresskürzel des Belegtyps (z.B. "KU" bei Kundenbelegen); als Parameter ist der Belegtyp anzugeben.
belegeafaktor liefert die Information zur Interpretation von RNetto (z.B. bei Rechnungen +1, bei Gutschriften -1);
als Parameter ist der Belegtyp als Ausdruck oder Datenbankfeld anzugeben
mwst liefert die Steuerprozente eines Steuerschlüssels zum aktuellen Datum;
als Parameter ist der Steuerschlüssel als Ausdruck oder Datenbankfeld anzugeben
checksumpost berechnet eine spezielle Prüfziffer;
der Parameter muss eine Zeichenkette mit 11 Ziffern liefern
projektsumme liefert  in Abhängigkeit vom Preistyp des Projektes die Netto- oder Bruttoprojektsumme;
als Parameter ist die Nummer des Projektes anzugeben
preisgruppenbezeichnung liefert die Bezeichnung einer Preisgruppe; als Parameter ist dabei die Nummer der Preisgruppe als Zahl oder Zeichenkette zu übergeben

Beispiele

bestellt({Artikelnummer};"1") liefert die für den Standort "1" bestellte Menge des vom Datenfeld "Artikelnummer" ausgegebenen Artikel
bestand("500009";"1";"500,1,1") liefert den Bestand des Artikels "500009" auf dem Lagerplatz "500,1,1," des Flächenlagers "500" im Standort "1".
shellexecute("notepad";"c:\test.txt";3) öffnet die Datei c:\test.txt im maximierten NotePad.

Diese speziellen Funktionen sind über Formelplatzhalter in jeder Druckvorlage anwendbar, in denen die benötigten Parameter zur Verfügung stehen.